避免玩家在遊戲中作弊是非常重要的,在之前的文章我們有提到如何防止遊戲作弊產生,這篇文章將會說明在程式中如何防止玩家作弊。
在Client-Server系統中因為有權威伺服器的關係,我們可以把重要的計算(較容易被鑽漏洞的地方 ex: 傷害、玩家數值等)在伺服器裡做運算,在封包中我們只需要傳送玩家的攻擊指令或行走指令,例如玩家點擊滑鼠左鍵,則傳送一個攻擊指令的封包,伺服器再去運算前方是否有敵人,再將結果回傳到客戶端,而不是傳送玩家是否有成功攻擊到前方的敵人,或是傳送造成的傷害數值等。
我們也可以透過伺服器去交叉比對遊戲中的數值,來預防玩家在遊戲中作弊,例如玩家目前等級5,可是卻傳來要求領取等級6的獎品,那我在伺服器就可以先比對玩家的指令,是否為可執行的指令。
玩家將密碼傳送到伺服器時,這存在著一定的風險,這時我們需要在密碼的封包上進行加密,然後在伺服器解密來做比對,可以使用sha256或是比較新的加密方式,以免被有心人士破解。
有一些遊戲會要求玩家安裝一些防作弊的軟體,像是 Easy Anti-Cheat 或是 Riot Vanguard 等。